[LeetCode]43 高精度乘法 | 您所在的位置:网站首页 › 字符串相乘 leetcode › [LeetCode]43 高精度乘法 |
Multiply Strings(高精度乘法)
【难度:Medium】 Given two numbers represented as strings, return multiplication of the numbers as a string. Note: The numbers can be arbitrarily large and are non-negative. 实现高精度非负整数乘法。 解题思路按照常规解法,用字符串操作来模拟乘法的步骤可以先实现字符串高精度加法,再将加法运用到乘法过程中。这种方法简单但是耗时比较大,这里介绍一种比较巧妙的方法,借鉴LeetCode上的一份高票代码。 c++代码如下: //高票代码版本 class Solution { public: string multiply(string num1, string num2) { int m = num1.size(); int n = num2.size(); vector array(m+n); string ans = ""; for (int i = m-1; i >= 0; i--) { for (int j = n-1; j >= 0; j--) { int index1 = i + j; int index2 = i + j + 1; int sum = (num1[i]-'0')*(num2[j]-'0')+array[index2]; array[index1] += sum / 10; array[index2] = sum % 10; } } for (auto v:array) { if (ans.size() != 0 || v != 0) ans += to_string(v); } return ans.size() == 0?"0":ans; } }; //简单但低效版本 class Solution { public: string multiply(string num1, string num2) { if(num1.empty()) return num2; if (num2.empty()) return num1; if (num1.size() == 1 && num1[0] == '0') return "0"; if (num2.size() == 1 && num2[0] == '0') return "0"; string ans = ""; int count = -1; for (int i = num1.size()-1;i >= 0; i--) { string tmp = ""; int carry = 0; count++; for (int j = num2.size()-1; j >= 0; j--) { int m = (num1[i]-'0')*(num2[j]-'0')+carry; carry = m / 10; tmp = to_string(m%10)+tmp; } if (carry) tmp = to_string(carry)+tmp; int count_tmp = count; while (count_tmp) { tmp = tmp + "0"; count_tmp--; } ans = add(ans,tmp); } return ans; } string add(string num1, string num2) { if(num1.empty()) return num2; if (num2.empty()) return num1; int carry = 0; int i = num1.size()-1; int j = num2.size()-1; string ans = ""; while (i >= 0 && j >= 0) { int m = (num1[i]-'0')+(num2[j]-'0')+carry; carry = m / 10; ans = to_string(m%10) + ans; i--; j--; } while (i >= 0) { int m = (num1[i]-'0')+carry; carry = m / 10; ans = to_string(m%10) + ans; i--; } while (j >= 0) { int m = (num2[j]-'0')+carry; carry = m / 10; ans = to_string(m%10) + ans; j--; } if (carry) ans = to_string(carry)+ans; return ans; } }; |
CopyRight 2018-2019 实验室设备网 版权所有 |